package com.lottery.material.utils;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;

/**
 * 提示：springmvc底层使用的核心json转换工具---com.fasterxml.jackson
 * Description：JSON序列化工具类
 * Created by 朱正磊 on 2019-03-17 22:17
 */
@SuppressWarnings("ALL")
public class JsonUtil {

    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * description：将pojo对象转换成json字符串（对象当然也可以是Map对象）
     * user 朱正磊
     * time 2019-03-30 17:01
     * @param data pojo对象
     * @return 返回json字符串
     */
    public static String objectToJson(Object data) {
        try {
            return MAPPER.writeValueAsString(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * description：将json字符串转化为pojo对象（如果不知道pojo的具体类型，我们可以使用Map）
     * user 朱正磊
     * time 2019-03-30 17:01
     * @param jsonData json字符串
     * @param beanType pojo对象类型
     * @param <T> 泛型
     * @return 返回pojo对象
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            return MAPPER.readValue(jsonData, beanType);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * description：将json字符串转换成pojo对象的list集合（如果不知道pojo的具体类型，我们可以使用Map）
     * user 朱正磊
     * time 2019-03-30 17:05
     * @param jsonData json字符串
     * @param beanType pojo对象类型
     * @param <T> 泛型
     * @return 返回pojo对象的list集合
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        try {
            return MAPPER.readValue(jsonData, javaType);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}
